// 7.实现meger的过程或者rebase均可
function merge<T,U>(obj1:T,obj2:U):T&U{
    return {...obj1,...obj2};
}


// 8.定义一个泛型函数 MyArrayMap(ary: T[], cbk: (val: T) => U): U[]，它可以将数组映射到一个新数组中并返回。
function MyArrayMap<T,U>(ary: T[], cbk: (val: T) => U):U[]{
    let resulet:U[] = [];
    for(let i=0;i<ary.length;i++){
        resulet.push(cbk(ary[i]));
    }
    return resulet;
}

// 11.自定义一个验证类型以及使用过程，在使用的时候与原验证类型不一样，需使用断言的方式使用
let a:number=23;
let b:string;
b = a as never;

// 9.定义一个泛型类 SomeArray<T>，它可以满足任何元素的添加(类中需要有addContent原型方法并使用泛型)。
class SomeArray<T>{
    addContent<T>(){
        console.log('添加');
    }
}
let someArray = new SomeArray<any>();
someArray.addContent<any>()

// 10.定义一个拥有泛型的接口类型 SomeObject<T>，它可以添加任何值，并提供添加和删除内容的对应方法。


interface SomeObject<T> {
    addContent<T>(): void;
    deleteContent<T>(): void;
}

class SomeObjectClass<T> implements SomeObject<T> {
    addContent<T>() {
        console.log('添加');
    }
    deleteContent<T>() {
        console.log('删除');
    }
} {

}